import API from './API'

// 登录跳转状态字控制，避免因延迟跳转2次
let isLoginLoading = false

export default {
  init(app) {
    
    // console.log('app', app.$axios.default)
    // app.$axios.default.baseURL = Host
    const accessToken = app.$store.getters.token || app.$session.get('accessToken') || ''
    app.$axios.default.headers = {
      Authorization: `Bearer ${accessToken}`
    }

    // 请求前，预处理
    app.$axios.default.beforeSend = function(data) {
      //console.log('接口处理前',data);
      // console.log('beforeSend-data', data)
      if (data.url.includes('http://') || data.url.includes('https://')) {
        return data
      }

      const [urlKeys, params] = data.url.split('?')
      const [key1, key2] = urlKeys.split('/')
      if (API[key1] && API[key1][key2]) {
        data.url = params ? `${API[key1][key2]}?${params}` : API[key1][key2]
      } else {
        console.error('url有误，无法在api中找到对应', data.url)
        throw Error('url有误，无法在api中找到对应')
      }

      return data
    }

    app.$axios.default.transformRequest([
      data => {
        wx.showNavigationBarLoading()
        return data
      }
    ])

    app.$axios.default.transformResponse([
      res => {
        wx.hideNavigationBarLoading()
        wx.hideLoading()
        if (!res || (res && res.statusCode !== 200)) {
          switch (res.statusCode) {
            case 401:
            case 403:
              // fix: 解决跳转延迟导致跳转2次的情况
              if (isLoginLoading) return false

              app.$router.push({
                path: '/views/authorize/login',
                success() {
                  isLoginLoading = false
                },
                complete() {
                  isLoginLoading = false
                }
              })
              break
            case 404:
              res && res.data && res.data.error && app.$toast(res.data.error.message)
              break
            case 500:
              console.log('网络错误500', res)
              switch (res.data.error.code) {
                // 未绑定手机号
                case 40002:
                  app.$router.push('/views/authorize/login')
                  break

                default:
                  app.$toast(res.data.error.message || `网络错误:${res.statusCode}`)
                  break
              }
              break

            default:
              // app.$toast(res.data.error && res.data.error.message || `网络错误:${res.statusCode}`)
              console.log('service-error-default', res)
              break
          }
        }

        return res.data
      },
      error => {
        wx.hideNavigationBarLoading()
        wx.hideLoading()
        console.log('res-error', error)
        if (error.data && error.data.message) {
          console.error(error.statusCode)
          app.$toast(error.data.message)
        }
        return Promise.reject(error)
      }
    ])
  }
}
